import axios from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus';
import { Session } from '/@/utils/storage';
import { getToken } from '/@/utils/auth';

// 是否显示重新登录
export let isRelogin = { show: false };

// 配置新建一个 axios 实例
const service = axios.create({
	baseURL: import.meta.env.VITE_API_URL + '/admin-api/' as any,
	timeout: 50000,
	headers: { 'Content-Type': 'application/json;charset=utf-8' },
});
const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE;
// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// 在发送请求之前做些什么 token
		const isToken = (config.headers || {}).isToken === false;
		if (getToken() && !isToken) {
			(<any>config.headers).common['Authorization'] = 'Bearer ' +  getToken();
		}
		// 设置租户
		if (tenantEnable) {
			const tenantId = Session.get('tenantId');
			if (tenantId) {
				(<any>config.headers).common['tenant-id'] = tenantId;
			}
		}
		// get请求映射params参数
		if (config.method === 'get' && config.params) {
			let url = config.url + '?';
			for (const propName of Object.keys(config.params)) {
				const value = config.params[propName];
				var part = encodeURIComponent(propName) + "=";
				if (value !== null && typeof (value) !== "undefined") {
					if (typeof value === 'object') {
						for (const key of Object.keys(value)) {
							let params = propName + '[' + key + ']';
							var subPart = encodeURIComponent(params) + "=";
							url += subPart + encodeURIComponent(value[key]) + "&";
						}
					} else {
						url += part + encodeURIComponent(value) + "&";
					}
				}
			}
			url = url.slice(0, -1);
			config.params = {};
			config.url = url;
		}
		return config;
	},
	(error) => {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

// 添加响应拦截器
service.interceptors.response.use(
	(response) => {
		// 对响应数据做点什么
		const res = response.data;
		console.info(res);
		// 未设置状态码则默认成功状态
		const code = res.code || 200;
		// 获取错误信息
		const msg = res.msg;
		if (code) {
			// `token` 过期或者账号已在别处登录
			if (code === 401) {
				if (!isRelogin.show) {
					isRelogin.show = true;
					Session.clear(); // 清除浏览器全部临时缓存
					ElMessageBox.confirm('你已被登出，请重新登录', '系统提示', {
						confirmButtonText: '重新登录',
						cancelButtonText: '取消',
						type: 'warning'
					})
					.then(() => {})
					.catch(() => {});
					// .then(() => {
					// 	isRelogin.show = false;
					// 	store.dispatch('LogOut').then(() => {
					// 		// 如果是登录页面不需要重新加载
					// 		if (window.location.hash.indexOf("#/login") !== 0) {
					// 			location.href = '/home';
					// 		}
					// 	})
					// }).catch(() => {
					// 	isRelogin.show = false;
					// });
				}
				return Promise.reject(service.interceptors.response);
			} else if (code === 500) {
				ElMessageBox(msg);
				return Promise.reject(new Error(msg));
			} else if (code !== 200) {
				ElMessageBox(msg);
				return Promise.reject('error')
			} else {
				return response.data;
			}
		}
	},
	(error) => {
		// 对响应错误做点什么
		if (error.message.indexOf('timeout') != -1) {
			ElMessage.error('网络超时');
		} else if (error.message == 'Network Error') {
			ElMessage.error('网络连接错误');
		} else if (error.message.includes("timeout")) {
			ElMessage.error('系统接口请求超时');
		} else if (error.message.includes("Request failed with status code")) {
			ElMessage.error("系统接口" + error.message.substr(error.message.length - 3) + "异常")
		}
		return Promise.reject(error);
	}
);
export function getBaseHeader() {
	return {
		'Authorization': "Bearer " + getToken(),
		'tenant-id': Session.get('tenantId'),
	}
}
// 导出 axios 实例
export default service;
